package models

import (
	"context"
	"time"
)

// Cart 购物车表
type Cart struct {
	Id         int64     `json:"id" xorm:"pk autoincr"`
	UserId     int64     `json:"user_id" xorm:"not null comment('用户ID') index"`
	ProductId  string    `json:"product_id" xorm:"not null comment('商品ID') index"`
	SkuId      string    `json:"sku_id" xorm:"not null comment('SKU ID') index"`
	Quantity   int       `json:"quantity" xorm:"not null default 1 comment('商品数量')"`
	Selected   int       `json:"selected" xorm:"tinyint(1) not null default 1 comment('是否选中：0否 1是')"`
	Status     int       `json:"status" xorm:"tinyint(1) not null default 1 comment('状态：0无效 1有效')"`
	UpdateTime time.Time `json:"update_time" xorm:"not null updated comment('更新时间')"`
	CreateTime time.Time `json:"create_time" xorm:"not null created comment('创建时间')"`
}

// TableName 表名
func (Cart) TableName() string {
	return "cart"
}

// CartFindByIds 根据ID列表查询
func CartFindByIds(ctx context.Context, ids []int64) (data []*Cart, err error) {
	err = getSession(ctx).In("id", ids).Find(&data)
	return
}

// CartFindOne 根据条件查询单条
func CartFindOne(ctx context.Context, id int64) (data *Cart, err error) {
	data = new(Cart)
	_, err = getSession(ctx).ID(id).Get(data)
	return
}

func CartBatchSelected(ctx context.Context, uid int64, selected int, ids []string) (err error) {
	_, err = getSession(ctx).In("product_id", ids).Where("user_id = ?", uid).
		Update(&Cart{Selected: selected})
	return
}

func CartBatchDelete(ctx context.Context, uid int64, ids []string) (err error) {
	_, err = getSession(ctx).In("product_id", ids).Where("user_id = ?", uid).
		Delete(&Cart{})
	return
}
